{"version":3,"file":"static/chunks/pages/create-account/start/[...pageId]-b72ec9f09c2f724d.js","mappings":"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","sources":["webpack://_N_E/?1bc4","webpack://_N_E/./src/lib/analytics/handlers/eventLogHandler.ts","webpack://_N_E/./src/lib/analytics/handlers/klaviyoEventHandler.ts","webpack://_N_E/./src/lib/analytics/commonEmitter.ts","webpack://_N_E/./src/lib/analytics/eventEmitter.ts","webpack://_N_E/./src/lib/analytics/handlers/abstractAnalyticsHandler.ts","webpack://_N_E/./src/lib/analytics/handlers/googleTagManagerHandler.ts","webpack://_N_E/./src/lib/dataSource/lostApi/common.ts","webpack://_N_E/./src/lib/utils/analytics/startAddPet.ts","webpack://_N_E/./src/lib/utils/analytics/startPetSearch.ts","webpack://_N_E/./src/lib/utils/helpers/dateHelpers/dates.ts","webpack://_N_E/./src/lib/utils/storage/local-storage.ts","webpack://_N_E/./src/lib/utils/helpers/ObjectsHelpers/getExpirationDate.ts","webpack://_N_E/./src/lib/utils/helpers/stringHelpers/parseToJSONSafe.ts","webpack://_N_E/./src/lib/utils/storage/session-storage.ts","webpack://_N_E/./src/pages/create-account/start/[...pageId].tsx","webpack://_N_E/<anon>"],"sourcesContent":["\n    (window.__NEXT_P = window.__NEXT_P || []).push([\n      \"/create-account/start/[...pageId]\",\n      function () {\n        return require(\"private-next-pages/create-account/start/[...pageId].tsx\");\n      }\n    ]);\n    if(module.hot) {\n      module.hot.dispose(function () {\n        window.__NEXT_P.push([\"/create-account/start/[...pageId]\"])\n      });\n    }\n  ","import AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n/**\n * EventLogHandler\n *\n * This will console log all the event data\n *\n * YOU WILL NEED TO UPDATE THE next.config.js TO ALLOW CONSOLE LOGS\n *\n * @augments AbstractAnalyticsHandler\n * @class\n */\nexport default class EventLogHandler extends AbstractAnalyticsHandler {\n  /**\n   * @memberof EventLogHandler\n   * @param {IEvent} data - The data to be sent with the event\n   */\n  send(data: IEvent) {\n    const analyticFeature = this.getAnalyticsFeature();\n\n    /**\n     * The data object to be sent to the console\n     *\n     * @memberof EventLogHandler\n     * @member {object} dataObject\n     */\n    const dataObject: {\n      /** The data associated with the event */\n      data: object;\n      /** The feature flags that are enabled */\n      feature: string;\n    } = {\n      data: data.data,\n      feature: analyticFeature,\n    };\n\n    console.log('EventLogHandler:', dataObject);\n  }\n}\n","import getBasePath from '@/lib/utils/getBasePath/getBasePath';\nimport axios from 'axios';\nimport AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n\n/**\n * KlaviyoEventHandler\n *\n * @augments AbstractAnalyticsHandler\n */\nexport default class KlaviyoEventHandler extends AbstractAnalyticsHandler {\n  /** @param {IEvent} data - The data to be sent with the event */\n  async send(data: IEvent) {\n    const eventData = {\n      data: {\n        type: 'event',\n        attributes: {\n          properties: data.data.attributes,\n          time: new Date(),\n          metric: {\n            data: {\n              type: 'metric',\n              attributes: {\n                name: data.name,\n              },\n            },\n          },\n          profile: {\n            data: {\n              type: 'profile',\n              attributes: data.data.profile,\n            },\n          },\n        },\n      },\n    };\n    axios.post(`${getBasePath()}/api/klaviyo/events`, eventData);\n  }\n}\n","import { googleTagManagerBrand } from '../constants/constants/analytics';\nimport EventEmitter from './eventEmitter';\nimport EventLogHandler from './handlers/eventLogHandler';\nimport GoogleTagManagerHandler from './handlers/googleTagManagerHandler';\nimport KlaviyoEventHandler from './handlers/klaviyoEventHandler';\n\n/** Instances of each handler class */\nconst logEventHandler = new EventLogHandler(googleTagManagerBrand);\nconst gtmEventHandler = new GoogleTagManagerHandler(googleTagManagerBrand);\nconst klaviyoEventHandler = new KlaviyoEventHandler(googleTagManagerBrand);\n\n/** Instances of each emitter */\nexport const logEventEmitter = new EventEmitter([logEventHandler]);\nexport const gtmEventEmitter = new EventEmitter([gtmEventHandler]);\n\n/** DefaultEventEmitter to contain all handlers */\nexport const defaultEventEmitter = new EventEmitter([\n  logEventHandler,\n  gtmEventHandler,\n]);\n\n/** KlaviyoEventEmitter to contain Klaviyo related handlers */\nexport const klaviyoEventEmitter = new EventEmitter([\n  logEventHandler,\n  klaviyoEventHandler,\n]);\n","import AbstractAnalyticsHandler, {\n  IEvent,\n} from './handlers/abstractAnalyticsHandler';\n\n/**\n * EventEmitter\n *\n * This will be used to dispatch each event to the appropriate handler\n *\n * @class\n */\nexport default class EventEmitter {\n  /**\n   * The handlers to be used for each event\n   *\n   * @memberof EventEmitter\n   * @member {AbstractAnalyticsHandler[]} handlers\n   */\n  private handlers: AbstractAnalyticsHandler[];\n\n  /** @param {AbstractAnalyticsHandler[]} handlers - Instances of handlerClasses */\n  constructor(handlers: AbstractAnalyticsHandler[]) {\n    this.handlers = handlers;\n  }\n\n  /**\n   * The event handler\n   *\n   * @param {IEvent} data - Information about the event\n   */\n  handleEvent(data: IEvent) {\n    this.handlers.forEach((handler) => {\n      handler.send(data);\n    });\n  }\n}\n","import { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { analyticsFeatureKey } from '@/lib/utils/featureFlags/optimizely/featureFlagOverride';\nimport CookieStorage from '@/lib/utils/storage/cookie-storage';\n\n/** @typedef validTypes - Valid types for event data */\ntype ValidTypes = string | number | boolean | object | null | undefined;\n\n/** @typedef eventData - How to pass the data within the event */\ntype EventData = { [key: string]: ValidTypes };\n\n/**\n * Describes the base event structure\n *\n * @interface IEvent\n */\nexport interface IEvent {\n  /**\n   * The name of the event\n   *\n   * @memberof IEvent\n   * @member {string} name\n   */\n  name: string;\n  /**\n   * The data associated with the event\n   *\n   * @memberof IEvent\n   * @member {EventData} data - The data associated with the event\n   */\n  data: EventData;\n}\n\n/**\n * Provides an abstract class for analytics handlers\n *\n * @abstract\n * @class\n * @name analyticsHandler\n */\nexport default abstract class AbstractAnalyticsHandler {\n  /**\n   * The source platform of the event data\n   *\n   * @memberof AbstractAnalyticsHandler\n   * @member {string} brand\n   */\n  brand: string;\n\n  /**\n   * @memberof AbstractAnalyticsHandler\n   * @param {string} brand - The source platform of the event data\n   */\n  constructor(brand: string) {\n    this.brand = brand;\n  }\n\n  /**\n   * @memberof AbstractAnalyticsHandler\n   * @returns {string} - The analytic feature that is enabled\n   * @protected\n   */\n  protected getAnalyticsFeature(): string {\n    const cookies = new CookieStorage();\n    const optimizelyDecision = cookies.get(analyticsFeatureKey) as {\n      /** The analytic feature that is enabled */\n      analytic: string;\n    };\n    let feature: string = notApplicableString;\n    if (optimizelyDecision && optimizelyDecision.analytic) {\n      // Split the string into an array\n      feature = optimizelyDecision.analytic;\n    }\n    return feature;\n  }\n\n  /**\n   * @memberof AbstractAnalyticsHandler\n   * @abstract\n   * @param {IEvent} data - The data to be sent with the event\n   */\n  abstract send(data: IEvent): void;\n}\n","import AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n\n/**\n * GoogleTagManagerHandler\n *\n * @augments AbstractAnalyticsHandler\n */\nexport default class GoogleTagManagerHandler extends AbstractAnalyticsHandler {\n  /** @param {IEvent} data - The data to be sent with the event */\n  send(data: IEvent) {\n    const feature = this.getAnalyticsFeature();\n    /** The data object to be sent to Google Tag Manager */\n    const dataObject: { [key: string]: string | string[] } = {\n      brand: this.brand,\n      ...data.data,\n      feature,\n    };\n    gtag('event', data.name, dataObject);\n  }\n}\n","import { PetcoLoveSDK } from '@petcolove/lost--client--api-sdk';\n\n/**\n * Initialize the SDK\n *\n * @returns {PetcoLoveSDK} The SDK instance\n */\nexport function initSDK(): PetcoLoveSDK {\n  /**\n   * The PLL API base URL\n   *\n   * @constant {string | undefined} pllApiBaseUrl\n   */\n  const pllApiBaseUrl =\n    process.env.NEXT_PUBLIC_PLL_API_BASE_URL ??\n    process.env.STORYBOOK_PLL_API_BASE_URL;\n  /**\n   * The PLL Websocket base URL\n   *\n   * @constant {string | undefined} pllWebsocketBaseUrl\n   */\n  const pllWebsocketBaseUrl =\n    process.env.NEXT_PUBLIC_PLL_WEBSOCKET_BASE_URL ??\n    process.env.STORYBOOK_PLL_WEBSOCKET_BASE_URL;\n\n  if (!pllApiBaseUrl) {\n    throw new Error('NEXT_PUBLIC_PLL_API_BASE_URL is not defined');\n  }\n\n  if (!pllWebsocketBaseUrl) {\n    throw new Error('NEXT_PUBLIC_PLL_WEBSOCKET_BASE_URL is not defined');\n  }\n\n  const sdk = new PetcoLoveSDK(pllApiBaseUrl, pllWebsocketBaseUrl);\n\n  return sdk;\n}\n\nexport const sdk: PetcoLoveSDK = initSDK();\n","import { defaultEventEmitter } from '@/lib/analytics/commonEmitter';\nimport { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { PetStatus } from '@/lib/constants/types/analytics';\nimport { InferredSpecies } from '@/lib/constants/types/pets';\n\n/**\n * Start Add Pet Event Handler Data\n *\n * @interface IStartAddPetEventData\n */\nexport interface IStartAddPetEventData {\n  /** Click Text */\n  clickText: string;\n  /** Where the add pet was initiated */\n  context: 'Dashboard' | 'Sign Up Flow';\n  /** Pet Status */\n  petStatus?: PetStatus;\n  /** What type of user is creating the pet */\n  listingSource: 'Consumer Pet Listing' | 'Shelter Pet Listing';\n  /** Pet Species */\n  species?: InferredSpecies;\n}\n\n/**\n * Send the start add pet event to google analytics\n *\n * @param {IStartAddPetEventData} data - The data to send\n */\nexport const startAddPetEventHandler = ({\n  clickText,\n  context,\n  petStatus,\n  listingSource,\n  species,\n}: IStartAddPetEventData) => {\n  const eventData = {\n    name: 'start_add_pet',\n    data: {\n      click_text: clickText,\n      context,\n      items: [\n        {\n          pet_id: notApplicableString,\n          pet_name: notApplicableString,\n          pet_status: petStatus || notApplicableString,\n          listing_source: listingSource,\n          species: species || notApplicableString,\n          location_id: notApplicableString,\n        },\n      ],\n    },\n  };\n  defaultEventEmitter.handleEvent(eventData);\n};\n","import { defaultEventEmitter } from '@/lib/analytics/commonEmitter';\nimport { IEvent } from '@/lib/analytics/handlers/abstractAnalyticsHandler';\nimport { AnalyticsInitiatingComponent } from '@/lib/storageClasses/analyticsEventStorage';\n\n/**\n * The flow type\n *\n * @type {Flow}\n */\ntype Flow = 'Lost' | 'Found' | 'All';\n\n/**\n * The event name\n *\n * @constant {string}\n */\nconst eventName = 'start_pet_search';\n\n/**\n * The interface for the user sign up event\n *\n * @interface IUserSignUpEvent\n */\nexport interface IStartPetSearchEvent {\n  /** The clicked text */\n  clickText: string;\n  /** The search flow */\n  flow: Flow;\n  /** The component used to start event */\n  component: AnalyticsInitiatingComponent;\n}\n\n/**\n * Handle the user sign up event\n *\n * @param {IStartPetSearchEvent} params - The event params\n */\nexport const startPetSearchEventHandler = ({\n  clickText,\n  flow,\n  component,\n}: IStartPetSearchEvent) => {\n  const eventData: IEvent = {\n    name: eventName,\n    data: {\n      click_text: clickText,\n      flow_type: flow,\n      component,\n    },\n  };\n  defaultEventEmitter.handleEvent(eventData);\n};\n","// Today's date\nexport const today = new Date();\n// Tomorrow's Date\nexport const tomorrow = new Date(today.getTime() + 86400000);\n\n/**\n * Get a date object that is X minutes from now\n *\n * @param {number} minutes - Time in minutes\n * @returns {Date} A date object that is X minutes from now\n */\nexport const getDateXMinutesFromNow = (minutes: number) => {\n  return new Date(new Date().getTime() + minutes * 60 * 1000);\n};\n\n/**\n * Check if a date is valid\n *\n * @param {string} date - The date to check\n * @returns {boolean} - True if the date is valid, false otherwise\n */\nexport const isDateValid = (date: string) => {\n  return !isNaN(new Date(date).getTime());\n};\n","import AbstractStorage, { IStorageConfig } from './abstract-storage';\n\n/**\n * LocalStorage Local Storage is available across all browser tabs. It is not\n * cleared when the tab is closed.\n *\n * @augments AbstractStorage\n * @class\n */\nexport default class LocalStorage extends AbstractStorage {\n  /**\n   * Get Get the data from the local storage.\n   *\n   * @param {string} id - The id of the data to get.\n   * @returns {object | null} - The data or null if not found.\n   */\n  get(id: string): object | string | null {\n    if (typeof window === 'undefined') {\n      return null;\n    }\n    const data = localStorage.getItem(id);\n\n    if (!data) return null;\n    // Parse the data and check if the expiration date is passed\n    let parsedData = null;\n\n    parsedData = JSON.parse(data);\n    if (parsedData.expiration && new Date(parsedData.expiration) < new Date()) {\n      this.delete(id);\n      return null;\n    }\n    return parsedData;\n  }\n\n  /**\n   * Set Set the data in the local storage.\n   *\n   * @param {string} id - The id of the data to set.\n   * @param {object | string} data - The data to set.\n   * @param {IStorageConfig} [config] - The configuration for the local storage.\n   */\n  set(id: string, data: object | string, config?: IStorageConfig): void {\n    if (config?.expires) {\n      if (typeof data === 'string') {\n        data = { data, expiration: config.expires };\n      } else {\n        data = { ...data, expiration: config.expires };\n      }\n    }\n    localStorage.setItem(id, JSON.stringify(data));\n  }\n\n  /**\n   * Delete Delete the data from the local storage.\n   *\n   * @param {string} id - The id of the data to delete.\n   */\n  delete(id: string): void {\n    localStorage.removeItem(id);\n  }\n}\n","/**\n * Get the expiration date from the data.\n *\n * @param {object | null} data - The data.\n * @returns {Date | null} - The expiration date or null if not found.\n */\nfunction getExpirationDate(\n  data: { [key: string]: unknown } | null\n): Date | null {\n  if (\n    data !== null &&\n    'expiration' in data &&\n    data?.expiration &&\n    typeof data.expiration === 'string'\n  ) {\n    /**\n     * The expiration date from the data.\n     *\n     * @constant {Date} expirationDate\n     */\n    const expirationDate = new Date(data.expiration);\n\n    if (!isNaN(expirationDate.getTime())) {\n      return expirationDate;\n    }\n    console.error('Invalid expiration date: ', data.expiration);\n  }\n\n  return null;\n}\n\nexport default getExpirationDate;\n","/**\n * A helper function to parse a JSON string safely\n *\n * @param {string} str - The string to parse\n * @returns {string | object} - The parsed JSON object or the string\n */\nfunction parseToJSONSafe(str: string): string | { [key: string]: unknown } {\n  try {\n    return JSON.parse(str);\n  } catch (error) {\n    console.error('Unable to parse string to JSON: ', str);\n  }\n  return str;\n}\n\nexport default parseToJSONSafe;\n","import getExpirationDate from '../helpers/ObjectsHelpers/getExpirationDate';\nimport parseToJSONSafe from '../helpers/stringHelpers/parseToJSONSafe';\nimport AbstractStorage, { IStorageConfig } from './abstract-storage';\n\n/**\n * SessionStorage Session Storage is a storage that is available only in the\n * current browser tab. It is cleared when the tab is closed. It is not shared\n * between tabs.\n *\n * @augments AbstractStorage\n * @class\n */\nexport default class SessionStorage extends AbstractStorage {\n  /**\n   * Whether the session storage is available.\n   *\n   * @returns {boolean} - Whether the session storage is available.\n   */\n  private isAvailable(): boolean {\n    return typeof window !== 'undefined';\n  }\n\n  /**\n   * Get Get the data from the session storage.\n   *\n   * @param {string} id - The id of the data to get.\n   * @returns {object | null} - The data or null if not found.\n   */\n  get(id: string): object | string | null {\n    if (!this.isAvailable()) {\n      return null;\n    }\n    const data = sessionStorage.getItem(id);\n\n    if (!data) {\n      return null;\n    }\n\n    // Parse the data and check if the expiration date is passed\n    const parsedData = parseToJSONSafe(data);\n\n    if (typeof parsedData === 'string') {\n      return parsedData;\n    }\n    /**\n     * The data expiration date.\n     *\n     * @constant {Date | null} expirationDate\n     */\n    const expirationDate = getExpirationDate(parsedData);\n\n    if (expirationDate && expirationDate < new Date()) {\n      this.delete(id);\n      return null;\n    }\n    return parsedData;\n  }\n\n  /**\n   * Set Set the data in the session storage.\n   *\n   * @param {string} id - The id of the data to set.\n   * @param {object | string} data - The data to set.\n   * @param {IStorageConfig} [config] - The session configuration.\n   */\n  set(id: string, data: object | string, config?: IStorageConfig): void {\n    if (!this.isAvailable()) {\n      return;\n    }\n    if (config?.expires) {\n      if (typeof data === 'string') {\n        data = { data, expiration: config.expires };\n      } else {\n        data = { ...data, expiration: config.expires };\n      }\n    }\n    sessionStorage.setItem(id, JSON.stringify(data));\n  }\n\n  /**\n   * Delete Delete the data from the session storage.\n   *\n   * @param {string} id - The id of the data to delete.\n   */\n  delete(id: string): void {\n    sessionStorage.removeItem(id);\n  }\n}\n","import Head from '@/components/templates/Head/Head';\nimport StepperFormTemplate, {\n  defaultSubmitLabel,\n} from '@/components/templates/StepperFormTemplate/StepperFormTemplate';\nimport { getIdTokenSSR } from '@/lib/dataSource/auth/getIdToken';\nimport getMe from '@/lib/dataSource/lostApi/auth/me';\nimport { MultiPageFormProvider } from '@/lib/hooks/multiPageForm/MultiPageForm';\nimport {\n  FormTypes,\n  PageTypes,\n} from '@/lib/hooks/multiPageForm/configs/Configuration';\nimport { ICreateAccountStartFormData as IFormData } from '@/lib/hooks/multiPageForm/configs/CreateAccountStart';\nimport {\n  IStartAddPetEventData,\n  startAddPetEventHandler,\n} from '@/lib/utils/analytics/startAddPet';\nimport { startPetSearchEventHandler } from '@/lib/utils/analytics/startPetSearch';\nimport { GetServerSideProps, GetServerSidePropsContext, NextPage } from 'next';\nimport { useRouter } from 'next/router';\nimport { useEffect, useState } from 'react';\n\n/**\n * The form Id is used to identify the form in the MultiPageFormProvider.\n *\n * @constant\n * @type {FormTypes}\n */\nexport const formId: FormTypes = 'create-account/start';\n\n/**\n * ICreateAccountStartForm Create Account Start Form Interface\n *\n * @interface\n */\ninterface ICreateAccountStartForm {\n  /** The page Id */\n  pageId: PageTypes;\n}\n\n/**\n * Create Account Start Page\n *\n * @param {ICreateAccountStartForm} props - The props\n * @returns {NextPage<ICreateAccountStartForm>} - The I Lost a Pet Form Page\n */\nconst CreateAccountStartForm: NextPage<ICreateAccountStartForm> = ({\n  pageId,\n}: ICreateAccountStartForm) => {\n  const router = useRouter();\n  const [loading, setLoading] = useState(false);\n\n  /** Send the start add pet event data on mount */\n  useEffect(() => {\n    const data: IStartAddPetEventData = {\n      clickText: 'Sign Up',\n      context: 'Sign Up Flow',\n      listingSource: 'Consumer Pet Listing',\n    };\n    /** Send the start add pet event to google analytics */\n    startAddPetEventHandler(data);\n  }, []);\n\n  /**\n   * On Submit\n   *\n   * @param {object} data - The data from the form\n   * @returns {void}\n   */\n  const onSubmit = async (data: IFormData) => {\n    setLoading(true);\n    const initiatingComponent = 'Sign Up Button / All Pages';\n\n    switch (data.typeOfPet) {\n      case 'found':\n        /** Send the start pet search to google analytics */\n        startPetSearchEventHandler({\n          clickText: defaultSubmitLabel,\n          component: initiatingComponent,\n          flow: 'Lost',\n        });\n        router.push('/create-account/found');\n        break;\n      case 'lost':\n        /** Send the start pet search to google analytics */\n        startPetSearchEventHandler({\n          clickText: defaultSubmitLabel,\n          component: initiatingComponent,\n          flow: 'Found',\n        });\n        router.push('/create-account/lost');\n        break;\n      default:\n        router.push('/create-account/safe');\n        break;\n    }\n  };\n\n  return (\n    <MultiPageFormProvider formId={formId} pageId={pageId}>\n      <Head title=\"Create An Account\" noIndex={true} />\n      <StepperFormTemplate\n        key={pageId}\n        loading={loading}\n        submitFunction={onSubmit}\n        submitButtonDisabled={loading}\n      />\n    </MultiPageFormProvider>\n  );\n};\n\nexport default CreateAccountStartForm;\n\n/**\n * Get Server Side Props This function is used to populate the form found in the\n * context params of the url path.\n *\n * @param {object} context - The context of the page\n */\nexport const getServerSideProps: GetServerSideProps = async (\n  context: GetServerSidePropsContext\n) => {\n  const idToken = await getIdTokenSSR(context.req, context.res);\n  // This page is only accessible if the user is not logged in\n  if (idToken) {\n    const user = await getMe(idToken);\n    const userId = user.user.id;\n    if (userId) {\n      return {\n        redirect: {\n          destination: '/dash',\n          permanent: false,\n        },\n      };\n    }\n  }\n\n  const pageId = context.params?.pageId as PageTypes;\n  const page = pageId[0];\n  return {\n    props: {\n      pageId: page,\n    },\n  };\n};\n"],"names":["window","__NEXT_P","push","__webpack_require__","EventLogHandler","AbstractAnalyticsHandler","send","data","getAnalyticsFeature","KlaviyoEventHandler","eventData","type","attributes","properties","time","Date","metric","name","profile","axios","concat","getBasePath","logEventHandler","googleTagManagerBrand","gtmEventHandler","GoogleTagManagerHandler","klaviyoEventHandler","EventEmitter","defaultEventEmitter","handleEvent","handlers","forEach","handler","constructor","cookies","CookieStorage","optimizelyDecision","get","analyticsFeatureKey","feature","notApplicableString","analytic","brand","dataObject","gtag","sdk","initSDK","pllApiBaseUrl","process","pllWebsocketBaseUrl","PetcoLoveSDK","startAddPetEventHandler","clickText","context","petStatus","listingSource","species","param","click_text","items","pet_id","pet_name","pet_status","listing_source","location_id","startPetSearchEventHandler","flow","component","flow_type","today","tomorrow","getTime","getDateXMinutesFromNow","minutes","isDateValid","isNaN","date","LocalStorage","AbstractStorage","id","localStorage","getItem","parsedData","JSON","parse","expiration","delete","set","config","expires","setItem","stringify","removeItem","ObjectsHelpers_getExpirationDate","expirationDate","stringHelpers_parseToJSONSafe","str","error","SessionStorage","isAvailable","sessionStorage","parseToJSONSafe","getExpirationDate","formId","__webpack_exports__","pageId","router","useRouter","loading","setLoading","useState","useEffect","onSubmit","initiatingComponent","typeOfPet","defaultSubmitLabel","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsxs","MultiPageFormProvider","jsx","Head","title","noIndex","StepperFormTemplate","submitFunction","submitButtonDisabled"],"sourceRoot":""}